﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AGVController.AgvModel
{
    /// <summary>
    /// 机器⼈推送给上位机的参数
    /// </summary>
    public static class robot_push
    {
        /// <summary>
        /// 机器人的 x 坐标, 单位 m
        /// </summary>
        public static double x { get; set; }
        /// <summary>
        /// 机器人的 y 坐标, 单位 m
        /// </summary>
        public static double y { get; set; }
        /// <summary>
        /// 机器人的 angle 坐标, 单位 rad
        /// </summary>
        public static double angle { get; set; }
        /// <summary>
        /// 离机器人最近站点的 id（该判断比较严格，机器人必须很靠近某一个站点，这个距离可以通过参数配置中的CurrentPointDist修改，默认为 0.3m。如果机器人与所有站点的距离大于这个距离，则这个字段为空字符。如果想要获取上一个完成任务的站点，可以取 finished_path 数组中的最后一个元素）
        /// </summary>
        public static string current_station { get; set; }
        /// <summary>
        /// 机器人是否被阻挡是
        /// </summary>
        public static bool blocked { get; set; }
        /// <summary>
        /// 机器人电池电量,范围[0, 1]
        /// </summary>
        public static double battery_level { get; set; }
        /// <summary>
        /// 电池是否正在充电
        /// </summary>
        public static bool charging { get; set; }
        /// <summary>
        /// true 表示急停按钮处于激活状态(按下),false 表示急停按钮处于非激活状态(拔起)
        /// </summary>
        public static bool emergency { get; set; }

        /// <summary>
        /// 报警码 Fatal的数组, 所有出现的 Fatal 报警都会出现在数据中
        /// </summary>
        public static List<object> fatals { get; set; }

        /// <summary>
        /// 报警码 Error的数组, 所有出现的 Error 报警都会出现在数据中
        /// </summary>
        public static List<object> errors { get; set; }

        /// <summary>
        /// 报警码 Warning的数组, 所有出现的 Warning 报警都会出现在数据中
        /// </summary>
        public static List<object> warnings { get; set; }

        /// <summary>
        /// 是否处于软急停状
        /// </summary>
        public static bool soft_emc { get; set; }


        /// <summary>
        /// 0 = FAILED(定位失败),1 = SUCCESS(定位正确),2 = RELOCING(正在重定位),3=COMPLETED(定位完成)
        /// </summary>
        public static double reloc_status { get; set; }

        /// <summary>
        /// 0 = NONE,1 = WAITING(目前不可能出现该状态),2 = RUNNING,3 = SUSPENDED,4 = COMPLETED,5 = FAILED,6 = CANCELED
        /// </summary>
        public static double task_status { get; set; }

        /// <summary>
        /// 导航类型, 0 = 没有导航, 1 = 自由导航到任意点, 2 = 自由导航到站点, 3 = 路径导航到站点, 7 = 平动转动, 100 = 其他
        /// </summary>
        public static double task_type { get; set; }


        /// <summary>
        /// 当前导航要去的站点, 仅当 task_type 为2 或 3 时该字段有效, task_status 为RUNNING 时说明正在去这个站点,task_status 为 COMPLETED 时说明已经到达这个站点, task_status 为 FAILED时说明去这个站点失败, task_status 为SUSPENDED 则说明去这个站点的导航暂停
        /// </summary>
        public static string target_id { get; set; }

    }

}
